header{
	package procesador.tablas;
	
	import procesador.Tabla;
	import procesador.Campo;
	import java.util.List;
	import java.util.ArrayList;
	import java.util.LinkedList;
}

class Traductor extends TreeParser;
options{
	importVocab=Anasint;
}
{
	private List<Tabla> tablas = new ArrayList<Tabla>();
	
	public List<Tabla> getTablas(){
		return this.tablas;
	}
}

/* TABLAS */
tablas: #(TABLAS (tabla)*)
	;
	
tabla {Tabla tabla;}: 
		#(i:IDENT {tabla = new Tabla(i.getText());} campos[tabla] claves[tabla] registros[tabla]) 
		{
			tablas.add(tabla);
			//System.out.println("\tTabla procesada: " + tabla.getNombre());
		}
	;

/* CAMPOS */
campos[Tabla tabla]: #(CAMPOS (campo[tabla])*);
campo[Tabla tabla] {String t=null;}: 
		#(CAMPO i:IDENT t=tipo)
		{
							tabla.addCampo(new Campo(i.getText(), t));
		}
	;

tipo returns [String res=null]
	: NUMERIC 	{res = Campo.CAMPO_NUMERICO;}
	| CHAR		{res = Campo.CAMPO_TEXTO;}
	;

/* CLAVES */
claves [Tabla tabla]: #(PRIMARYKEY (i:IDENT 
										{tabla.addPrimaryKey(i.getText());}
									)+
						)
	;

/* REGISTROS */
registros [Tabla tabla]: #(REGISTROS (registro[tabla])*);
registro [Tabla tabla]{List<Object> atr = new LinkedList<Object>();}: 
		#(REGISTRO (atributo[atr])*) {tabla.addRegistro(atr);}
	;
atributo[List<Object> atr]
		: c:CADENA	{atr.add(c.getText());}
		| n:NUMERO	{atr.add(new Double(n.getText()));}
		;